package com.dg.river.module.base

import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.dg.river.core.util.L

/**
 * @作者：Hututu
 * @时间：2023/10/7 10:18
 * @描述：内容描述
 * @修改：修改内容
 * @Version:1.0
 */
abstract class BaseFragment : Fragment() {

    lateinit var mContext: Context

    lateinit var logContent: StringBuffer

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return initLayout(inflater, container)
    }

    abstract fun initLayout(inflater: LayoutInflater, container: ViewGroup?): View

    override fun onAttach(context: Context) {
        super.onAttach(context)
        this.mContext = context
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // 打印日志
        printLog()
        // 初始化Intent参数
        initGetIntent()
        // 初始化View
        initView()
        // 初始化数据
        if (viewAndData()) initData()
        // 初始化点击事件
        initListener()
    }

    /**
     * 打印进入页面日志
     */
    private fun printLog() {
        logContent = StringBuffer()
        logContent.append(" \n")
        logContent.append(" \n----------进入页面----------------\n")
        logContent.append("| ").append("页面全类名：\n")
        logContent.append("| ").append(this.javaClass.name).append("\n")
    }

    /**
     * 初始化Intent参数
     */
    protected open fun initGetIntent() {
        val bundle = arguments
        if (bundle != null) {
            logContent.append("| ").append("接收参数：\n")
            val keySet = bundle.keySet()
            for (key in keySet) {
                val value = bundle.get(key)
                logContent.append("| ").append(key).append(" = ").append(value).append("\n")
            }
        } else {
            logContent.append("| ").append("接收参数：\n")
            logContent.append("| ").append("无").append("\n")
        }
        logContent.append("----------进入页面----------------\n")
        logContent.append(" \n")
        L.d(logContent.toString())
    }

    /**
     * 设置布局
     *
     * @return
     */
    abstract fun initView()

    /**
     * 是否初始化View接着初始化数据
     *
     * @return
     */
    abstract fun viewAndData(): Boolean

    /**
     * 初始化数据
     *
     * @return
     */
    abstract fun initData()

    /**
     * 初始化监听
     *
     * @return
     */
    abstract fun initListener()
}